/**
 * 根据文件名打开一个文件
 */
FILE *file_open(String file_name) {
    static FILE *file = NULL;
    if ((file = fopen(file_name, "r")) == NULL) {
        printf("%s open failed", file_name);
        exit(1);
    }
    return file;
}

/**
 * 读取文件, 将每一个单词存入 list_head 链表中
 */
int file_read(FILE *file, struct list_head *head) {
    int word_count = 0;
    char tmp[30];
    while((fscanf(file, "%s", tmp)) != EOF){
        // 初始化 list_head 节点
        struct list_head list_node;
        INIT_LIST_HEAD(&list_node);
        // 复制 tmp 的内容
        String source = (String)malloc(sizeof(char) * strlen(tmp));
        strcpy(source, tmp);
        // 处理 tmp 的文字, 如果返回为空串则直接进入下一轮
        source = word_handle(source);
        if (strlen(source) == 0) {
            continue;
        }
        // 创建单词节点
        Word *word_node = (Word *) malloc (sizeof(Word));
        word_node->str = source;
        word_node->link = list_node;
        // 将单词加入 list_head 链表
        list_add(&(word_node->link), head);
        word_count++;
    }
    return word_count;
}

int do_read(struct list_head *head, String file_name) {
    INIT_LIST_HEAD(head);
    FILE *file = file_open(file_name);
    return file_read(file, head);
}